home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Demos / A.D. Software / OOFILE 1.3b4d6.sit / OOFILE 1.3b4d6 / MacCodeWarriorDemo1.3b4d6 / docs / samples / ooftst06.cpp < prev    next >
C/C++ Source or Header  |  1997-03-17  |  3KB  |  95 lines

  1. // Copyright 1994 A.D. Software. All Rights Reserved
  2.  
  3. // OOFTEST6
  4.  
  5. // this sample modifies related data
  6. // including demonstrating the caching of related records
  7. // as would typically be used in a GUI environment
  8.  
  9. // Simple stream I/O is used to interact with the user.
  10. #include "oofile.h"
  11.  
  12.  
  13. #include "ooftst02.h"
  14.  
  15. // global variables that define the database using the ooftst02 classes
  16.  
  17.     TEST_CONNECT    theDB;
  18.     dbPatients     Patients;
  19.     dbVisits    Visits;
  20.     dbRelationship PatientVisits(Patients.Visits, Visits.Patient);
  21.     
  22.  
  23. int main()
  24. {
  25.     cout << "OOFILE Validation Suite - Test 6\n"
  26.          << "Simple test to demonstrate updating related fields" << endl
  27.          << "using the database from ooftst02" << endl;
  28.  
  29.     #ifdef TESTING_DBASE
  30.         #ifdef _Macintosh
  31.             const char* kExistsName =  ":ooftst06:Patients.dbf";
  32.             const char* kDatabaseName = ":ooftst06:";
  33.         #else
  34.             const char* kExistsName =   "Patients.dbf"
  35.             const char* kDatabaseName = "";
  36.         #endif    
  37.  
  38.     #else
  39.         const char* kDatabaseName = "ooftst06.db";
  40.         const char* kExistsName = kDatabaseName;
  41.     #endif
  42.     
  43.     if (dbConnect::fileExists(kExistsName)) {
  44.         theDB.openConnection(kDatabaseName);
  45.     }
  46.     else {
  47.         theDB.newConnection(kDatabaseName);
  48.         Patients.AddTestData();
  49.     }
  50.  
  51.     dbView smithVisits(Patients.Visits); 
  52.     smithVisits << Patients.Visits->VisitDate << Patients.Visits->Why; 
  53.  
  54.     Patients.search(Patients.LastName=="Smith");
  55.     cout << "Dumping Smith and his visits: " << endl 
  56.          << Patients << endl 
  57.          << smithVisits << endl;
  58.  
  59.     cout << "changing the first reason to 'Computer-Induced Sanity' " << endl;
  60.     Patients.Visits->gotoRecord(0);
  61.     Patients.Visits->Why = "Computer-Induced Sanity";
  62.     
  63.     cout << "changing the second reason to 'Funny Views' " << endl;
  64.     smithVisits.source()->gotoRecord(1);  // test navigating via the view
  65.     Patients.Visits->Why = "Funny Views";
  66.  
  67.     Patients.saveRecord();  // save both changes
  68.  
  69.     cout << "Dumping Smith and changed visits: " << endl 
  70.          << Patients << endl 
  71.          << smithVisits << endl;
  72.  
  73.     Patients.AddVisit("14/2/1995", "Anxiety Attacks");
  74.     
  75. // now change to another related record - our new one should be cached
  76.     smithVisits.source()->gotoRecord(1);  
  77.     Patients.Visits->Why = "Changed Again";
  78.  
  79. // return to the new record (in the cache) and update it    
  80.     smithVisits.source()->gotoRecord(2);  
  81.     Patients.Visits->VisitDate = "15/2/1994";
  82.     
  83.     Patients.saveRecord(); 
  84.  
  85.     cout << "Dumping Smith and visits with added visit: " << endl 
  86.          << Patients << endl 
  87.          << smithVisits << endl;
  88.          
  89.     cout << "Now dumping the entire Visits file: " << endl << Visits;
  90.  
  91.     cout << "done" << endl;
  92.     
  93.     return EXIT_SUCCESS;
  94. }       
  95.